﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Text;
using System.Threading.Tasks;

namespace CongregacaoOs.Business
{

    /// <summary>
    /// Classe Base para Email - ENTIDADE
    /// </summary>
    public class ClassEmail : IDisposable
    {
        public string Assunto { get; set; }
        public List<string> ListofDestinatario { get; set; }
        public string Dominio { get; set; }
        public string Email { get; set; }
        public string Menssagem { get; set; }
        public int Porta { get; set; }
        public string ProtocoloSmtp { get; set; }
        public string Remetente { get; set; }
        public string RemetentePadrao { get; set; }
        public string Senha { get; set; }

        public void Dispose() { }

        public ClassEmail()
        {
            this.Assunto = "";
            this.ListofDestinatario = new List<string>();
            this.Dominio = "";
            this.Email = "ccbinformaticaweb@gmail.com";
            this.Menssagem = "";
            this.Porta = 587;
            this.ProtocoloSmtp = "smtp.gmail.com";
            this.Remetente = "ccbinformaticaweb@gmail.com";
            this.RemetentePadrao = "ccbinformaticaweb@gmail.com";
            this.Senha = "ccb0sr1be1r@0";
          

        }
    }


    /// <summary>
    /// Classe Base para Email - BUSINESS - DATA
    /// </summary>
    public class ccSendEmail : IDisposable
    {

        public void Dispose() { }

        public bool SendMail(ClassEmail email)
        {
            bool emailEnviado = false;
            string remet = "";
            MailMessage NewMessage = new MailMessage();

            

            SmtpClient cliente = new SmtpClient(email.ProtocoloSmtp, email.Porta); 
            cliente.EnableSsl = true;
            cliente.UseDefaultCredentials = false;
            
            
            if (email.Remetente == "") remet = email.RemetentePadrao;
            else { remet = email.Remetente; }

            NewMessage.From = new MailAddress(email.Remetente, "Grupo de Apoio - Ribeirão Preto");            

            for (int i = 0; i < email.ListofDestinatario.Count; i++)
            {
                NewMessage.To.Add(email.ListofDestinatario[i]);
            }

            NewMessage.Subject = email.Assunto;
            NewMessage.Body = email.Menssagem;
            NewMessage.IsBodyHtml = true;

            cliente.Credentials = new NetworkCredential(email.Email, email.Senha);

            try
            {

                cliente.Send(NewMessage);
                emailEnviado = true;

            }
            catch (ArgumentNullException nulo)
            {
                throw new Exception("Argumento Nullo: " + nulo);
            }
            catch (InvalidOperationException invalido)
            {
                throw new Exception("Operação invalida: " + invalido);
            }
            catch (SmtpFailedRecipientException falhaSmtp)
            {
                throw new Exception("Falha com o protocolo Smtp: " + falhaSmtp);
            }
            catch (Exception erro)
            {
                throw new Exception("Erro ao enviar email: " + erro);
            }

            return emailEnviado;

        }
    }
}
